themingengine: Implement outline support
authorBenjamin Otte <otte@redhat.com>
Sun, 8 Jan 2012 01:55:34 +0000 (02:55 +0100)
committerBenjamin Otte <otte@redhat.com>
Mon, 9 Jan 2012 17:38:00 +0000 (18:38 +0100)
gtk/gtkthemingengine.c

index b09b8d497f9bae85525bdb2727e8546914ba44f6..124f2a8f8250bdd4b223b5d25dd70e95c1b2bc5b 100644 (file)
@@ -1794,6 +1794,29 @@ render_frame_internal (GtkThemingEngine *engine,
   _gtk_rounded_box_apply_border_radius (&border_box, engine, state, junction);
 
   render_border (cr, &border_box, &border, hidden_side, colors, border_style);
+
+  border_style[0] = g_value_get_enum (_gtk_theming_engine_peek_property (engine, "outline-style"));
+  if (border_style[0] != GTK_BORDER_STYLE_NONE)
+    {
+      int offset;
+
+      border_style[1] = border_style[2] = border_style[3] = border_style[0];
+      border.top = g_value_get_int (_gtk_theming_engine_peek_property (engine, "outline-width"));
+      border.left = border.right = border.bottom = border.top;
+      colors[0] = *(GdkRGBA *) g_value_get_boxed (_gtk_theming_engine_peek_property (engine, "outline-color"));
+      colors[3] = colors[2] = colors[1] = colors[0];
+      offset = g_value_get_int (_gtk_theming_engine_peek_property (engine, "outline-offset"));
+      
+      /* reinit box here - outlines don't have a border radius */
+      _gtk_rounded_box_init_rect (&border_box, x, y, width, height);
+      _gtk_rounded_box_shrink (&border_box,
+                               - border.top - offset,
+                               - border.right - offset,
+                               - border.left - offset,
+                               - border.bottom - offset);
+      
+      render_border (cr, &border_box, &border, hidden_side, colors, border_style);
+    }
 }
 
 static void